package cn.gyouzhe.utils;

import cn.gyouzhe.AppHolder;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;

/**
 * 公共工具
 *
 * @author wangchuan
 * @datetime 2018/2/11 21:46
 */
public final class Common {
    /**
     * 默认日期时间格式
     */
    public final static String DEFAULT_PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";
    /**
     * 默认日期格式
     */
    public final static String DEFAULT_PATTERN_DATE = "yyyy-MM-dd";

    private Common() {
        throw new RuntimeException("工具类不能创建对象");
    }

    /**
     * 获取类
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return AppHolder.getInstance().getApplicationContext().getBean(clazz);
    }

    /**
     * 时间转换格式 默认格式为 yyyy-MM-dd HH:mm:ss
     * @param now  当前日期时间
     * @return
     */
    public final static String datetimeToString(LocalDateTime now) {
        return datetimeToString(now, DEFAULT_PATTERN_DATETIME);
    }

    /**
     * 转换时间格式
     * @param now     日期时间
     * @param pattern 转换成字符串的格式
     * @return 时间格式
     */
    public final static String datetimeToString(LocalDateTime now, String pattern) {
        return now.format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 格式化时间字符串
     * @param timeStr 时间字符串
     * @param pattern 时间格式
     * @return 日期时间对象
     */
    public final static LocalDateTime stringToDatetime(String timeStr, String pattern) {
        return LocalDateTime.parse(timeStr, DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 格式化时间字符串 默认字符串为yyyy-MM-dd HH:mm:ss
     * @param timeStr  时间字符串
     * @return 日期时间对象
     */
    public final static LocalDateTime stringToDatetime(String timeStr) {
        return stringToDatetime(timeStr, DEFAULT_PATTERN_DATETIME);
    }

    /**
     * 字符串转换成日期对象
     * @param timeStr  时间字符串
     * @param pattern  时间格式类型
     * @return 日期对象
     */
    public final static LocalDate stringToDate(String timeStr, String pattern) {
        return LocalDate.parse(timeStr, DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 字符串转换成日期对象 默认格式化yyyy-MM-dd
     * @param timeStr 时间字符串
     * @return 日期对象
     */
    public final static LocalDate stringToDate(String timeStr) {
        return stringToDate(timeStr, DEFAULT_PATTERN_DATE);
    }
}
